/* eslint-disable-next-line  */
const fs = require('fs');
/* eslint-disable-next-line  */
const path = require('path');
const businessModulesDir = path.join(__dirname, 'businessModule');
const commonModulesDir = path.join(__dirname, 'commonModule');

const generateImportsAndExports = (baseDir, moduleType) => {
  const directories = fs
    .readdirSync(baseDir)
    .filter((name) => fs.lstatSync(path.join(baseDir, name)).isDirectory());
  const imports = [];
  const admModules = [];
  const webModules = [];
  const commonModules = [];
  directories.forEach((dir) => {
    const moduleName = `${dir.charAt(0).toUpperCase() + dir.slice(1)}_Module`;
    const modulePath = `@/modules/${moduleType}/${dir}/${dir}.module`;
    imports.push(`import { ${moduleName} } from '${modulePath}';`);
    if (moduleType == 'commonModule') return commonModules.push(moduleName);
    if (moduleName.includes('Web')) {
      webModules.push(moduleName);
    } else {
      admModules.push(moduleName);
    }
  });
  return { imports, admModules, webModules, commonModules };
};

export function generateModuleImports() {
  const businessModules = generateImportsAndExports(businessModulesDir, 'businessModule');
  const commonModules = generateImportsAndExports(commonModulesDir, 'commonModule');
  const imports = [...businessModules.imports, ...commonModules.imports];
  const importStatements = imports.join('\n');
  const AdmModules = businessModules.admModules.join(',\n  ');
  const WebModules = businessModules.webModules.join(',\n  ');
  const commonModulesd = commonModules.commonModules.join(',\n  ');
  const combinedCode = `${importStatements}

/**
 * 导入的管理后台模块
 * 包含所有管理后台相关模块的导入，用于在应用程序中注册和使用这些模块。
 */
export const AdmModules = [
  ${AdmModules},
];

/**
 * 导入的前台模块
 * 包含所有前台相关模块的导入，用于在应用程序中注册和使用这些模块。
 */
export const WebModules = [
  ${WebModules},
];

/**
 * 导入的公共模块
 * 包含所有公共相关模块的导入，用于在应用程序中注册和使用这些模块。
 */
export const CommonModules = [
  ${commonModulesd},
];

/**
 * 导入的所有模块
 * 包含所有公共相关模块的导入，用于在应用程序中注册和使用这些模块。
 */
export const RegiestModules = [...CommonModules, ...WebModules, ...AdmModules];
`;
  const outputFilePath = path.join('./src/modules/', 'modules.ts');
  fs.writeFileSync(outputFilePath, combinedCode, 'utf8');
  console.log('模块映射代码生成成功:', outputFilePath);
}
